
package modelo;

import controlador.*;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author Manuel Figueroa Recio
 */
public class Cliente {
    private String nombreUser;      // nombre de usuario
    private String contrasena;      // contraseña
    private String nick;            // Nick
    private boolean conectado = false;
    //private HiloEnvio envio;      // thread que se encarga del envio
    private ObjectOutputStream salida;
    private ObjectInputStream entrada;
    private HiloEscucha receptor;   // thread que se encarga de la recepcion
    private Mensaje mensaje;
    private Socket socket;

    public Cliente(){

    }

    public void conectar(int puerto, String ip){
        try{
            socket = new Socket(ip, puerto);
            salida =  new ObjectOutputStream(socket.getOutputStream());
            entrada = new ObjectInputStream(socket.getInputStream());
            salida.writeUTF(nombreUser); // escribe el usuario
            salida.flush();
            salida.writeUTF(contrasena); // escribe la contraseña
            salida.flush();
            receptor = new HiloEscucha(this, entrada);
            receptor.iniciar();
            conectado = true;
            
        }
        catch(Exception e){
            //Controlar desconexion controlada.
        }
    }
    //test method
    public void enviar(Mensaje msj){
        if (conectado){
            try {
            salida.writeObject(msj);
            salida.flush();
            salida.reset(); // sin este metodo los objetos siempre son el mismo.. ¬¬
            } catch (IOException ex) {
                System.out.println(ex.toString());
            }
        }
    }

    /**
     * @return the nombreUser
     */
    public String getNombreUser() {
        return nombreUser;
    }

    /**
     * @param nombreUser the nombreUser to set
     */
    public void setNombreUser(String nombreUser) {
        this.nombreUser = nombreUser;
    }

    /**
     * @return the contraseña
     */
    public String getContrasena() {
        return contrasena;
    }

    /**
     * @param contraseña the contraseña to set
     */
    public void setContrasena(String contraseña) {
        this.contrasena = contraseña;
    }

    /**
     * @return the nick
     */
    public String getNick() {
        return nick;
    }

    /**
     * @param nick the nick to set
     */
    public void setNick(String nick) {
        this.nick = nick;
    }

    /**
     * @return the conectado
     */
    public boolean isConectado() {
        return conectado;
    }

    /**
     * @param conectado the conectado to set
     */
    public void setConectado(boolean conectado) {
        this.conectado = conectado;
    }

    /**
     * @return the envio
     */

   /* public HiloEnvio getEnvio() {
        return envio;
    }*/

    /**
     * @return the receptor
     */
    public HiloEscucha getReceptor() {
        return receptor;
    }

    /**
     * @return the mensaje
     */
    public Mensaje getMensaje() {
        return mensaje;
    }

    /**
     * @param mensaje the mensaje to set
     */
    public void setMensaje(Mensaje mensaje) {
        this.mensaje = mensaje;
    }

    /**
     * @return the socket
     */
    public Socket getSocket() {
        return socket;
    }

    /**
     * @param socket the socket to set
     */
    public void setSocket(Socket socket) {
        this.socket = socket;
    }

    /**
     * @return the entrada
     */
    public ObjectInputStream getEntrada() {
        return entrada;
    }

    /**
     * @param entrada the entrada to set
     */
    public void setEntrada(ObjectInputStream entrada) {
        this.entrada = entrada;
    }

    
}
